﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Dominio;

namespace HotelGUI
{
    public partial class ABMPermisos : Form
    {
        ISistema sistema =  Dominio.Fabrica.getSistema();
        String LlenarCamposObligatorios = "Debe llenar todos los datos.";

        public ABMPermisos()
        {
            InitializeComponent();
            btnAgregar.Enabled = true;
            btnGuardar.Enabled = false;
        }

        private void limpiarForm()
        {
            txtDescripcion.Text = "";
        }

        private void ABMPermisos_Load(object sender, EventArgs e)
        {
            btnAgregar.Enabled = true;
            btnGuardar.Enabled = false;

            List<String[]> permisos = sistema.traerPermisos();
            foreach (String[] per in permisos)
            {
                int n = -10;
                try
                {
                    n = dgvPermisos.Rows.Add();
                    dgvPermisos.Rows[n].Cells["idPermiso"].Value = per[0];
                    dgvPermisos.Rows[n].Cells["Descripción"].Value = per[1];
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, "Error Cargando los Roles. " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    if (n >= 0)
                        try
                        {
                            dgvPermisos.Rows.RemoveAt(n);
                        }
                        catch (Exception ex1)
                        {
                            MessageBox.Show(this, ex1.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                }
            }
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if (txtDescripcion.Text != "")
            {
                try
                {
                    int numFila = 0;
                    while (dgvPermisos.RowCount > numFila && lblidCategoria.Text != dgvPermisos.Rows[numFila].Cells["idPermiso"].Value.ToString())
                    {
                        numFila++;
                    }
                    if (numFila != dgvPermisos.RowCount)
                    {
                        // Modifica el valor en la base de datos
                        sistema.modificarPermiso(int.Parse(lblidCategoria.Text), txtDescripcion.Text);
                        dgvPermisos.Rows[numFila].Cells["Descripción"].Value = txtDescripcion.Text;
                        btnAgregar.Enabled = true;
                        btnGuardar.Enabled = false;
                        limpiarForm();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
                MessageBox.Show(this, LlenarCamposObligatorios, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            if (txtDescripcion.Text != "")
            {
                int n = -10;
                try
                {
                    // Doy de alta la categoria en la base de datos
                    lblidCategoria.Text = sistema.altaPermiso(txtDescripcion.Text).ToString();

                    n = dgvPermisos.Rows.Add();
                    dgvPermisos.Rows[n].Cells["idPermiso"].Value = lblidCategoria.Text;
                    dgvPermisos.Rows[n].Cells["Descripción"].Value = txtDescripcion.Text;
                    limpiarForm();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    try
                    {
                        dgvPermisos.Rows.RemoveAt(n);
                    }
                    catch (Exception ex2)
                    {
                        MessageBox.Show(this, ex2.Message, "Error", MessageBoxButtons.OK,MessageBoxIcon.Error);
                    }
                }
            }
            else
                MessageBox.Show(this, LlenarCamposObligatorios, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            limpiarForm();
            btnAgregar.Enabled = true;
            btnGuardar.Enabled = false;
        }

        private void dgvPermisos_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex == -1)
            {
                return;
            }
            txtDescripcion.Text = dgvPermisos.Rows[e.RowIndex].Cells["Descripción"].Value.ToString();
            lblidCategoria.Text = dgvPermisos.Rows[e.RowIndex].Cells["idPermiso"].Value.ToString();

            btnAgregar.Enabled = false;
            btnGuardar.Enabled = true;
        }
        
    }
}
